#include <iostream>
#include <unistd.h>
#include <cassert>
#include <sys/types.h>
#include <sys/wait.h>

// 1.考察pipe函数的使用，以及对pipe函数参数的理解，同时考察对文件描述符的理解
// 2.要求：先创建管道，进而创建子进程，父子进程使用管道进行通信父进程向管道当中写“i am father”,子进程从管道当中读出内容, 并且打印到标准输出
// 3.提交要求：提交代码截图，提交代码执行之后的截图

int main()
{
    int fds[2];
    int flag = pipe(fds);
    assert(flag == 0);
    (void)flag;
    pid_t id = fork();
    if (id == 0)
    {
        close(fds[1]);
        char buffer[1024];
        ssize_t n = read(fds[0], buffer, sizeof(buffer) - 1);
        std::cout << "child get massage from parent success :" << buffer << std::endl;
        exit(0);
    }
    close(fds[0]);
    char buffer[1024] = "i am father";
    ssize_t n = write(fds[1], buffer, sizeof(buffer) - 1);
    std::cout << "parent->child : succes" << std::endl;

    int m = waitpid(id, nullptr, 0);
    assert(m == id);

    return 0;
}